##########################
# 难度预测 模糊匹配
# 输入：单条Json格式的Input_Data，见test_difficulty_predict中的格式
# 输出：难度数值
# --------
# Program Begin
# --------
# 对每一个内容类别都找到对应的初始值，做一个list或者是字典,取类别中所有INCIDENT的难度做平均（四舍五入）
# 先做语句与库中所有字串的模糊匹配，得出一个Bool值，return bool_result(最好能有一个精准度)
#
# 如果没匹配到，则在传入的Json中找内容类别，与库中的类别做匹配
# if bool_result is false:
#    # 如果在库中找到了对应的内容类别，直接返回对应类别的default值
#    if content_classification is found:
#        return 对应类别的default值（注意四舍五入）
#    # 如果在库中未找到对应的内容类别，直接返回预定的1.0初始值
#    else:
#        return 预定的default值  1.0
# 如果匹配到，直接赋值输出
# else:
#     直接将难度库对应的Difficulty数据赋值给result
# --------
# Program End
# --------
# 模糊匹配is_matched方法
# 设置一定的容错率: match_party长度1或2，全匹配；长度3或4，错1；长度5或6，错2；长度7或8，错3
# 输入：match_party：热线内容
#      key_word：匹配到的类别关键词
# 方法 is_matched：在 key_word 内逐个正则.*模糊匹配，比如匹配‘经常断停水’：‘.*断停水’，‘经.*停水’，‘经常.*水’，···
# 输出(返回)：True或False（是否匹配到）
##########################
import json

from src.hash_search import HashTable


class PredictDiff:

    # 对每一个内容类别都找到对应的初始值，做一个list或者是字典,取类别中所有INCIDENT的难度做平均
    # 解析Json数据
    # is_matched(key_word, match_party)
    # 在utils包中

    def get_result(self, difficulty_library):
        DIFFICULTY_LIBRARY = difficulty_library
        f = open(DIFFICULTY_LIBRARY, "r+", encoding="utf-8")
        info = json.load(f)
        list_a = []
        for i in info:
            list_a.append(i)
        hash_table = HashTable(len(list_a))
        for i in list_a:
            hash_table.insert_hash(i)
        res = hash_table.search_hash(self)
        return res
